package eightDataType;

import org.junit.Test;

/**
 * @author Ajie
 * @date 5/2/21
 * @function 二进制运算
 * 与（&）、非（~）、或（|）、异或（^）
 * 异或（^）
 *      异或的运算法则为：0⊕0=0，1⊕0=1，0⊕1=1，1⊕1=0（同为0，异为1）. 布尔类型：(true^false) > true
 * 与或非异或
 */
public class Int0xDemo {

    @Test
    public void test(){
        int a = 0b1;
        int b = 0b101;
        System.out.println("a&b："+Integer.toBinaryString(a&b));
        System.out.println("a|b："+Integer.toBinaryString(a|b));
        System.out.println("~a："+Integer.toBinaryString(~a));
        System.out.println("a & Max："+Integer.toBinaryString(a & 0xffffffff));// 1
        System.out.println("~b："+Integer.toBinaryString(~b));
        System.out.println("(~a)&(~b)："+Integer.toBinaryString((~a)&(~b)));

        //异或的运算法则为：0⊕0=0，1⊕0=1，0⊕1=1，1⊕1=0（同为0，异为1）
        System.out.println("a^b: "+Integer.toBinaryString(a^b));//按位 取不同。
    }

    @Test
    public int mathCountOf1(){//二进制 1的个数。
        int num = 0b11011011;

        int count = 0;
        while (num!=0){
            if ((num & 1) ==1){
                count++;
            }
            num = num>>1;

        }
        return count;
//        return Integer.bitCount(num);//todo java API 方法
    }
}
